package top.rainbowecho.article.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.data.domain.Pageable;
import top.rainbowecho.article.vo.ArticleInfoVo;
import top.rainbowecho.article.vo.ArticleQueryVo;
import top.rainbowecho.article.vo.ArticleUploadVo;
import top.rainbowecho.model.percona.Article;
import top.rainbowecho.model.percona.ArticleInfo;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 存储文章数据 服务类
 * </p>
 *
 * @author 杨健
 * @since 2020-07-25
 */
public interface IArticleService extends IService<Article> {

    /**
     * 根据上传的md格式的内容，进行解析并存储到数据库
     *
     * @param uploadVo 上传对象
     * @return 保存到数据库的数据
     */
    Article saveUploadArticle(ArticleUploadVo uploadVo) throws IOException;

    /**
     * 分页查询article信息
     *
     * @param articleQueryVo 查询条件包装对象
     * @param page 分页参数
     * @return 信息列表
     */
    List<ArticleInfoVo> findArticles(ArticleQueryVo articleQueryVo, Pageable page);

    /**
     * 用户点击一篇文章，进行阅读
     *
     * @param articleId 文章id
     * @param username 用户名
     * @return 文章信息
     */
    ArticleInfoVo readArticle(String articleId, String username);

    /**
     * 找到最近置顶的前三篇文章
     *
     * @return 文章列表
     */
    List<Article> findTopThree();

    /**
     * 更新文章的置顶标志，并更新缓存
     *
     * @param topArticle 要更新的文章
     */
    void updateArticleTop(Article topArticle);

    /**
     * 根据类型查找对应的三篇文章
     *
     * @param type  查询类型
     * @return 文章集合
     */
    List<ArticleInfo> findTypeTopThree(int type);
}
